package com.xujie.sportsmeeting.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 系统公告实体
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("system_notice")
public class SystemNotice implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 公告ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 公告标题
     */
    @NotBlank(message = "公告标题不能为空")
    @TableField("title")
    private String title;

    /**
     * 公告内容
     */
    @NotBlank(message = "公告内容不能为空")
    @TableField("content")
    private String content;

    /**
     * 公告类型 1-系统公告 2-比赛通知 3-成绩公布 4-紧急通知
     */
    @NotNull(message = "公告类型不能为空")
    @TableField("notice_type")
    private Integer noticeType;

    /**
     * 优先级 1-低 2-中 3-高 4-紧急
     */
    @TableField("priority")
    private Integer priority;

    /**
     * 是否置顶 0-否 1-是
     */
    @TableField("is_top")
    private Integer isTop;

    /**
     * 发布状态 0-草稿 1-已发布 2-已撤回 (使用现有的status字段)
     */
    @TableField("publish_status")
    private Integer publishStatus;

    /**
     * 发布时间
     */
    @TableField("publish_time")
    private LocalDateTime publishTime;

    /**
     * 过期时间 (使用现有的expire_time字段)
     */
    @TableField("expire_time")
    private LocalDateTime expireTime;

    /**
     * 发布人ID
     */
    @TableField("publisher_id")
    private Long publisherId;

    /**
     * 阅读次数
     */
    @TableField("read_count")
    private Integer readCount;

    /**
     * 状态 0-草稿 1-已发布 2-已下架 (数据库原有字段)
     */
    @TableField("status")
    private Integer status;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
